코딩테스트 연습 - 행렬의 덧셈 | 프로그래머스 스쿨

[ 템플릿 코드 ]

#include <string>
#include <vector>
 
using namespace std;
 
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    vector<vector<int>> answer;
    return answer;
}

[ 풀이 ]

#include <string>
#include <vector>
 
using namespace std;
 
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
{
    vector<vector<int>> answer = arr1;
 
    for (int i = 0; i < arr1.size(); i++)
    {
        for (int j = 0; j < arr1[i].size(); j++)
        {
            answer[i][j] += arr2[i][j];
        }
    }
 
    return answer;
}

[ 해설 ]

#include <string>
#include <vector>
 
using namespace std;
 
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
{
    // 최종 결과를 저장할 2차원 벡터
    // arr1의 구조(행과 열의 개수)를 그대로 복사해옴
    vector<vector<int>> answer = arr1;
 
    // 모든 행(Row)을 순회
    // arr1.size()는 행의 개수
    for (int i = 0; i < arr1.size(); i++)
    {
        // 현재 행의 모든 열(Column)을 순회
        // arr1[i].size()는 i번째 행의 열 개수
        for (int j = 0; j < arr1[i].size(); j++)
        {
            // 같은 위치에 있는 두 원소를 더함
            //
            // 예시)
            // arr1 = [[1,2],
            //         [2,3]]
            //
            // arr2 = [[3,4],
            //         [5,6]]
            //
            // i = 0, j = 0
            // answer[0][0] = 1 + 3 = 4
            //
            // i = 0, j = 1
            // answer[0][1] = 2 + 4 = 6
            //
            // i = 1, j = 0
            // answer[1][0] = 2 + 5 = 7
            //
            // i = 1, j = 1
            // answer[1][1] = 3 + 6 = 9
            answer[i][j] = arr1[i][j] + arr2[i][j];
        }
    }
 
    // 완성된 행렬 반환
    return answer;
}

[ 타 답안 ]

#include <string>
#include <vector>
 
using namespace std;
 
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
{
    // 최종 결과를 저장할 2차원 벡터
    // 예)
    // [
    //   [4, 6],
    //   [7, 9]
    // ]
    vector<vector<int>> answer;
 
    // 한 행(Row)의 결과를 임시로 저장할 벡터
    // 예)
    // [4, 6]
    vector<int> Q;
 
    // arr1의 모든 행을 순회
    // i = 현재 처리 중인 행 번호
    for (int i = 0; i < arr1.size(); i++)
    {
        // 현재 행의 모든 열을 순회
        // j = 현재 처리 중인 열 번호
        for (int j = 0; j < arr1[i].size(); j++)
        {
            // 같은 위치의 값을 더해서
            // 현재 행을 저장하는 Q에 추가
 
            // 예)
            // arr1[0][0] = 1
            // arr2[0][0] = 3
            // 1 + 3 = 4
 
            Q.push_back(arr1[i][j] + arr2[i][j]);
        }
 
        // 한 행의 계산이 끝났으므로
        // Q를 answer에 추가
 
        // 예)
        // Q = [4, 6]
        //
        // answer =
        // [
        //   [4, 6]
        // ]
        answer.push_back(Q);
 
        // 다음 행 계산을 위해 Q를 비움
 
        // 예)
        // Q = []
        Q.clear();
    }
 
    // 완성된 행렬 반환
    return answer;
}

C++ CodingTest